<script lang="ts">
export default {
  name: 'Person',
  beforeCreate() {
      console.log('beforeCreate')
      console.log('--', this)
  },
  setup() {
    console.log('@@', this) // this是undefined，因为setup函数是在beforeCreate之前执行的
    console.log('这个在beforeCreate之前')
    // 数据，原来是写在data中的，现在要改成响应式数据
    let name = '张三' // 注意：此时的name不是一个响应式数据
    let age = 18 // 注意：此时的age不是一个响应式数据
    let sex = '男' // 注意：此时的sex不是一个响应式数据
    let tel = '123456789' // 注意：此时的tel不是一个响应式数据

    // 方法
    function changeName() {
      console.log(1)
      name = '李四' // 注意，这样修改name，并不是响应式数据，所以不会更新页面
      console.log(name)
    }
    function changeAge() {
      console.log(2)
      age += 1
      console.log(age)
    }
    function showTel() {
      console.log(3)
      alert(tel)
      console.log(tel)
    }

    // 将数据、方法交出去，模版中才可以使用
    return {
      name, age, sex, tel,
      changeName, changeAge, showTel
    }

    // setup的返回值也可以是一个渲染函数

    // return function (){
    //   return '哈哈'
    // }
    // return ()=>'哈哈'
  },

}
</script>

<template>
  <div class="person">
    <p>姓名：{{ name }}</p>
    <p>年龄：{{ age }}</p>
    <p>性别：{{ sex }}</p>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
  </div>
</template>

<style scoped>
.person {
  background-color: skyblue;
  box-shadow: 0 0 10px #000;
  border-radius: 10px;
  padding: 20px;
}

button {
  margin: 0 5px;
}
</style>